﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;
using SAAC.DTO;
using System.Data;


namespace SAAC.DAL
{
	public class AtividadeComplementarDAL : DALBase
	{

		public AtividadeComplementarDTO Select(AtividadeComplementarDTO dto, string order = null)
		{
			try
			{
				string sql = "CALL sp_atividadeComplementar_sel(@id,@cargaHoraria,@dataRealizacao,@instituicao,@requerimentoId,@processoNumero,@order,@limit);";

				if (dto.Requerimento == null) dto.Requerimento = new RequerimentoDTO();
				if (dto.Processo == null) dto.Processo = new ProcessoDTO();


				MySqlCommand cmd = new MySqlCommand(sql, con);
				cmd.Parameters.AddWithValue("@id", dto.Id);
				cmd.Parameters.AddWithValue("@cargaHoraria", dto.CargaHoraria);
				cmd.Parameters.AddWithValue("@dataRealizacao", dto.DataRealizacao);
				cmd.Parameters.AddWithValue("@instituicao", dto.Instituicao);
				cmd.Parameters.AddWithValue("@requerimentoId", dto.Requerimento.Id);
				cmd.Parameters.AddWithValue("@processoNumero", dto.Processo.Numero);
				cmd.Parameters.AddWithValue("@order", order);
				cmd.Parameters.AddWithValue("@limit", 1);

				con.Open();
				MySqlDataReader dr;

				dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

				if (dr.Read())
				{
					dto.Id = Convert.ToInt32(dr["idAtividadeComplementar"]);
					dto.CargaHoraria = Convert.ToInt32(dr["cargaHoraria"]);
					dto.DataRealizacao = Convert.ToDateTime(dr["dataRealizacao"]);
					dto.Instituicao = (dr["instituicao"]).ToString();
					dto.Requerimento.Id = Convert.ToInt32(dr["Requerimento_idRequerimento"]);
					dto.Processo.Numero = (dr["Processo_numero"]).ToString();
				}
				else dto = null;

				return dto;
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				con.Close();
			}
		}

		public List<AtividadeComplementarDTO> SelectAll(AtividadeComplementarDTO dto, string order = null, int limit = 1000)
		{
			try
			{
				string sql = "CALL sp_atividadeComplementar_sel(@id,@cargaHoraria,@dataRealizacao,@instituicao,@requerimentoId,@processoNumero,@order,@limit);";

				if (dto.Requerimento == null) dto.Requerimento = new RequerimentoDTO();
				if (dto.Processo == null) dto.Processo = new ProcessoDTO();

				var lista = new List<AtividadeComplementarDTO>();

				MySqlCommand cmd = new MySqlCommand(sql, con);
				cmd.Parameters.AddWithValue("@id", dto.Id);
				cmd.Parameters.AddWithValue("@cargaHoraria", dto.CargaHoraria);
				cmd.Parameters.AddWithValue("@dataRealizacao", dto.DataRealizacao);
				cmd.Parameters.AddWithValue("@instituicao", dto.Instituicao);
				cmd.Parameters.AddWithValue("@requerimentoId", dto.Requerimento.Id);
				cmd.Parameters.AddWithValue("@processoNumero", dto.Processo.Numero);
				cmd.Parameters.AddWithValue("@order", order);
				cmd.Parameters.AddWithValue("@limit", limit);

				con.Open();
				MySqlDataReader dr;

				dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

				while (dr.Read())
				{
					var item = new AtividadeComplementarDTO();
					item.Id = Convert.ToInt32(dr["idAtividadeComplementar"]);
					item.CargaHoraria = Convert.ToInt32(dr["cargaHoraria"]);
					item.DataRealizacao = Convert.ToDateTime(dr["dataRealizacao"]);
					item.Instituicao = (dr["instituicao"]).ToString();
					item.Requerimento.Id = Convert.ToInt32(dr["Requerimento_idRequerimento"]);
					item.Processo.Numero = (dr["Processo_numero"]).ToString();
					lista.Add(item);
				}

				return lista;
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				con.Close();
			}
		}


		public void Insert(AtividadeComplementarDTO dto)
		{
			try
			{
                if (dto.Requerimento == null) dto.Requerimento = new RequerimentoDTO();
                if (dto.Processo == null) dto.Processo = new ProcessoDTO();

				String sql = @"CALL sp_atividadeComplementar_ins(@cargaHoraria,@dataRealizacao,@instituicao,@requerimentoId,@processoNumero);";

				MySqlCommand cmd = new MySqlCommand(sql, con);

				cmd.Parameters.AddWithValue("@cargaHoraria", dto.CargaHoraria);
				cmd.Parameters.AddWithValue("@dataRealizacao", dto.DataRealizacao);
				cmd.Parameters.AddWithValue("@instituicao", dto.Instituicao);
				cmd.Parameters.AddWithValue("@requerimentoId", dto.Requerimento.Id);
				cmd.Parameters.AddWithValue("@processoNumero", dto.Processo.Numero);

				con.Open();
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				con.Close();
			}
		}

		public void Update(AtividadeComplementarDTO dto)
		{
			try
			{
                if (dto.Requerimento == null) dto.Requerimento = new RequerimentoDTO();
                if (dto.Processo == null) dto.Processo = new ProcessoDTO();

				String sql = "CALL sp_atividadeComplementar_upd(@id,@cargaHoraria,@dataRealizacao,@instituicao,@requerimentoId,@processoNumero);";

				MySqlCommand cmd = new MySqlCommand(sql, con);

				cmd.Parameters.AddWithValue("@id", dto.Id);
				cmd.Parameters.AddWithValue("@cargaHoraria", dto.CargaHoraria);
				cmd.Parameters.AddWithValue("@dataRealizacao", dto.DataRealizacao);
				cmd.Parameters.AddWithValue("@instituicao", dto.Instituicao);
				cmd.Parameters.AddWithValue("@requerimentoId", dto.Requerimento.Id);
				cmd.Parameters.AddWithValue("@processoNumero", dto.Processo.Numero);

				con.Open();
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				con.Close();
			}
		}

		public void Delete(AtividadeComplementarDTO dto)
		{
			try
			{
                if (dto.Requerimento == null) dto.Requerimento = new RequerimentoDTO();
                if (dto.Processo == null) dto.Processo = new ProcessoDTO();

				String sql = "CALL sp_atividadeComplementar_del(@id);";

				MySqlCommand cmd = new MySqlCommand(sql, con);

				cmd.Parameters.AddWithValue("@id", dto.Id);

				con.Open();
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				con.Close();
			}
		}


	}
}
